// module.exports = function(mainApp) {
/*
 * 自定义服务。all services
 * @Author xialei
 * @Date 2016-1-18 
 */

/**
 * [数据相关的公共service]
 */
var mainApp = angular.module("mainApp");
mainApp.factory("DPUtil", ["$rootScope", "UIUtil", "$http", "$filter","$state",
    function($rootScope, UIUtil, $http, $filter,$state) {
        var _this = {};

        $rootScope.panels = {};

        _this.showLoading = function() {
            $rootScope.panels.isLoadingToastShow = true;
        };

        _this.hideLoading = function() {
            $rootScope.panels.isLoadingToastShow = false;
        };

        /**
         * [createContextPath 获取绝对路径]
         * @return {[type]} [description]
         */
        _this.getContextPath = function() {　
            var pathName = document.location.pathname;　
            var index = pathName.substr(1).indexOf("/");　
            var result = pathName.substr(0, index + 1);　
            return result;
        };

        /**
         * [getQueryString 获取路径中参数]
         * @param  {[type]} name [description]
         * @return {[type]}      [description]
         */
        _this.getQueryString = function(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
            var r = window.location.search.substr(1).match(reg);
            if (r != null) {
                return unescape(r[2])
            };
            return null;
        };

        /**
         * [angular的post请求]
         * @param {object} params [包含着请求参数的对象]
         * @param  {[string]} url         [请求地址]
         * @param  {[object]} data        [请求参数]     
         * @param  {[function]} success [成功回调函数]
         * @param  {[function]} error   [失败回调函数]
         * @param  {[number]} status_load两个状态false和true，true是有加载状态的 
         */
        _this.httpPost = function(params) {
            if (!params.status_load) { //默认打开
                _this.showLoading();
            }
            var req = {
                method: params.method?params.method:'POST',
                url: _this.getContextPath() + params.url,
                data: params.data
            };
            if (params.method=="GET"||params.method=="get") {
                req.params = params.data;
            }
            if (params.headers) {
                req.headers = params.headers;
            };
            $http({ method: "POST", url: _this.getContextPath() + "/has_logined.do" }).then(function(data) {
                if (!data.data.success) {
                    $state.go("loginApp");
                };
            }, function(e) {
                $state.go("loginApp");
            });
            $http(req).then(function(data) {
                if (data) {
                    params.success(data.data);
                    _this.hideLoading();
                } else {
                    if (params.error && angular.isFunction(params.error)) {
                        params.error(data.data);
                    } else {
                        // UIUtil.alert({ content: data.data.message });
                    };
                     _this.hideLoading();
                };
            }, function(e) {
                if (params.error && angular.isFunction(params.error)) {
                    params.error(e);
                } else {
                    // UIUtil.alert({ content: e });
                };
                _this.hideLoading();
            });





            // //httpPost请求            
            // $http.post(_this.getContextPath() + params.url, params.data).success(function(data) {
            //     if (data.code == 0 || data) {
            //         params.success(data);
            //         if (!params.status_load) {
            //             _this.hideLoading();
            //         }
            //     } else {
            //         if (params.error && angular.isFunction(params.error)) {
            //             params.error(data);
            //         } else {
            //             UIUtil.errorMsgPanel(data.message);
            //         }
            //     }
            // }).error(function(e) {
            //     if (!params.status_load) {
            //         _this.hideLoading();
            //     }
            //     UIUtil.errorMsgPanel(e);
            // });
        };
        /**
         * [angular的post请求]
         * @param {object} params [包含着请求参数的对象]
         * @param  {[string]} url         [请求地址]
         * @param  {[object]} data        [请求参数]     
         * @param  {[function]} success [成功回调函数]
         * @param  {[function]} error   [失败回调函数]
         * @param  {[number]} status_load两个状态false和true，true是有加载状态的 
         */
        _this.httpGet = function(params) {
            if (!params.status_load) { //默认打开
                $rootScope.loading = false;
            }
            var req = {
                method:'get',
                url: _this.getContextPath() + params.url,
                // url:"http://120.24.47.11:8080/washclothes"+ params.url,
                params: params.data
            };
            if (params.headers) {
                req.headers = params.headers;
            };
            // 判断是否session超时
            $http({ method: "POST", url: _this.getContextPath() + "/has_logined.do" }).then(function(data) {
                if (!data.data.success) {
                    window.location.href = _this.getContextPath() + "/view/login.html";
                };
            }, function(e) {
                window.location.href = _this.getContextPath() + "/view/login.html";
            });
            $http(req).then(function(data) {
                if (data) {
                    params.success(data.data);
                    $rootScope.loading = true;
                } else {
                    if (params.error && angular.isFunction(params.error)) {
                        params.error(data.data);
                    } else {
                        UIUtil.alert({ content: data.data.message });
                    };
                    $rootScope.loading = true;
                };
            }, function(e) {
                if (params.error && angular.isFunction(params.error)) {
                    params.error(e);
                } else {
                    UIUtil.alert({ content: e });
                };
                $rootScope.loading = true;
            });
        };
        _this.getDateToString = function(date, format) {
            if (!format) {
                format = "yyyy-MM-dd"
            };
            if (angular.isDate(date) && angular.isString(format)) {
                return $filter('date')(date, format);
            }
        };

        _this.getStringToDate = function(string) {
            if (angular.isString(string)) {
                return new Date(string.replace(/-/g, "/"));
            }
        };
        return _this;
    }
]);
mainApp.factory("UIUtil", ["$rootScope", function($rootScope) {
    var _this = {};
    /*数据页面操作处理service*/
    /**
     * 与前端界面相关的工具类
     */

    /**
     * 创建操作成功toast
     * @param  {[function]} expression toast完成后操作函数
     */
    _this.successToast = function(expression) {
        $rootScope.panels.isShowOpSuccessToast = true;
        $timeout(function() {
            $rootScope.panels.isShowOpSuccessToast = false;
            if (typeof(expression) == "function") {
                expression();
            }
        }, 1000);
    };
    /**
     * 创建一个出错面板。
     * @param  {[type]} errorMsg [description]
     */
    _this.errorMsgPanel = function(errorMsg) {
        $rootScope.errorMsg = errorMsg;
        $rootScope.panels.isShowOpFailDialog = true;
    };

    _this.toggleTouchmove = function(parent, stop) {
        $(parent).off("touchmove");
        $(parent).on("touchmove", function(e) {
            if (!stop) {
                e.preventDefault();
                e.stopPropagation();
            }
        });
    };

    _this.alert = function(tip) {
        $uibModal.open({
            animation: true,
            templateUrl: 'backHomeTpl/directiveTpl/alert.html',
            keyboard: false,
            size: "sm",
            backdrop: 'static',
            controller: ["$scope", "$uibModalInstance", "$rootScope",
                function($scope, $uibModal, $rootScope) {
                    $scope.title = tip.title || "提示";
                    $scope.content = tip.content || "提示";
                    $scope.ok = function() {
                        if (typeof tip.ok == "function") {
                            tip.ok();
                        }
                        $uibModal.close();
                    };
                }
            ]
        });
    }

    return _this;
}]);


// AngularJS控制器之间的数据共享及通信
mainApp.service('ObjectService', [ObjectService]);

function ObjectService() {
    var list = {};
    return {
        get: function(id) {
            return list[id];
        },
        set: function(id, v) {
            list[id] = v;
        }
    };
}


/**
 * globalInject[注入QQ表情、回到顶部、提示语、封装post提交]:
 * 函数SucceedHint()和ErrorHint()[提示语]，qqFaceContent()replaceEm()[QQ表情]，backToTop()[回到顶部]，httpPost【封装post提交】
 * 作用：减少创建注入和减少控制器一大串参数
 * @return 必要：注册函数(返回函数)
 */
// mainApp.factory('globalInject',function(urlUtil, uiUtil, $http, $rootScope){

//     // QQ图标点击显示表情
//     function qqFaceContent(){
//         // QQ表情
//         $('.emotion').qqFace({
//             id: 'facebox',
//             assign: 'saytext',
//             path: '../static/images/arclist/' //表情存放的路径
//         }); 
//     }
//     //数据解析内容的表情
//     function replaceEm(str){
//             str = str.replace(/\</g, '&lt;');
//             str = str.replace(/\>/g, '&gt;');
//             str = str.replace(/\n/g, '<br/>');
//             str = str.replace(/\[em_([0-9]*)\]/g, '<img src="../static/images/arclist/$1.gif" border="0" />');
//             return str;      
//     } 
//     // 回到顶部
//     function backToTop(){
//         var back_top = $('.back-top');
//         back_top.css('display','none');
//         $(window).scroll(function () {     
//             //滚动时触发
//             if ($(document).scrollTop() > 700){
//                 //获取滚动条到顶部的垂直高度,到相对顶部300px高度显示
//                 back_top.fadeIn(300);
//             }else{
//                 back_top.fadeOut(200);

//             }
//         });
//         /*点击回到顶部*/
//         back_top.click(function () {
//             $('html, body').animate({   //添加animate动画效果
//                 scrollTop: 0    
//             }, 500);
//             $('html, body').off('click');
//         });        
//     }

//     /**
//      * [angular的post请求]
//      * @param {object} params [包含着请求参数的对象]
//      * @param  {[string]} url         [请求地址]
//      * @param  {[object]} data        [请求参数]     
//      * @param  {[function]} success [成功回调函数]
//      * @param  {[function]} error   [失败回调函数]
//      * @param  {[number]} status_load两个状态0和1，1是有加载状态的 
//      * @param  {[number]} status_disabled两个状态0和1，1是有按钮静止点击状态的(防止网络较差，连续点击，向发后台请求)    
//      */
//     function httpPost(params) {
//          if(params.status_load){
//             $rootScope.panels.isLoadingToastShow = true;  //打开
//          }
//          if(params.status_disabled){
//             $('#button_disabled').attr('disabled',true);
//          }
//         //httpPost请求            
//         $http.post(urlUtil.getContextPath() + params.url, params.data).success(function(data){
//             if (data.code == 0 || data.meta.success == 1) {
//                 params.success(data.data,data.total);
//                 if(params.status_load){
//                     $rootScope.panels.isLoadingToastShow = false; //加载状态关闭
//                 }   
//                 if(params.status_disabled){
//                     $('#button_disabled').attr('disabled',false); // 打开静止点击按钮
//                 }                                 
//             } else {
//                 params.errorOperation(data.message);                   
//             }

//         }).error(function(data) {
//             if(params.status_load){
//                 $rootScope.panels.isLoadingToastShow = false; //关闭
//             }          
//             if(params.status_disabled){
//                 $('#dofavour').attr('disabled',false); // 打开静止点击按钮
//             }                
//             errorOperation(data.message);
//         });
//         function errorOperation(errorMessage) {
//             if (!errorFunction) {
//                 uiUtil.errorMsgPanel(errorMessage);
//             } else {
//                 errorFunction(errorMessage);
//             }
//         }        

//     }

//     /**
//      * [angular的get请求]
//      * @param {object} params [包含着请求参数的对象]
//      * @param  {[string]} url         [请求地址]
//      * @param  {[function]} success [成功回调函数]
//      * @param  {[function]} error   [失败回调函数]
//      * @param  {[number]} status两个状态0和1，0是有加载状态的，1是没有加载状态的     
//      */
//     function httpGet(params) {
//          if(params.status){
//             $rootScope.panels.isLoadingToastShow = true;  //打开
//          }
//         //httpPost请求            
//         $http.get(urlUtil.getContextPath() + params.url).success(function(data){
//             if (data.meta.success) {
//                 params.success(data.data);
//                 if(params.status){
//                     $rootScope.panels.isLoadingToastShow = false; //关闭
//                 }                    
//             } else {
//                 params.errorOperation(data.message);                   
//             }

//         }).error(function(e) {
//             if(params.status){
//                 $rootScope.panels.isLoadingToastShow = false; //关闭
//             }             
//             // errorOperation(e);
//         });
//         function errorOperation(errorMessage) {
//             if (!errorFunction) {
//                 uiUtil.errorMsgPanel(errorMessage);
//             } else {
//                 errorFunction(errorMessage);
//             }
//         }          
//     }


//     /**
//      * [提示窗口]
//      * @param  {[function]} hintWindow [提示弹框函数]
//      * @param  {[string]} message      [提示内容]
//      * @param  {[number]} status_color两个状态0和1 ,0是字体替换成red
//      * @param  {[number]} status_button_disabled 1点赞不让连续点击  
//      */    
//     function hintWindow(message,status_color,status_button_disabled){
//         $('.HintWindow').css('display','block');
//         if(status_color){
//             $('.HintWindow a').css('color','#333').html(message);
//         }else{
//             $('.HintWindow a').css('color','red').html(message);
//         }      
//         if(status_button_disabled){
//             $('.dofavour').attr('disabled',true);
//             $('#button_disabled').attr('disabled',true);
//         }  

//         setTimeout(function(){
//             $('.HintWindow').css('display', 'none');
//             if(status_button_disabled){
//                 $('.dofavour').attr('disabled',false);
//                 $('#button_disabled').attr('disabled',false);
//             }  
//           },2200); 
//     }

//     /**
//      * @param  {[function]} showStars [星星统计表] 
//      */    
//      function showStars(param){

//         if(!parseFloat(param.averageStar)){
//             var averageStar = 0;
//         }else{
//           var averageStar = parseFloat(param.averageStar);  
//         }

//         $("#myStat").attr("data-text", averageStar);
//         $("#myStat").attr("data-percent", averageStar / 5 * 100);

//         $("#oneStars").attr("text", param.oneStars);
//         // 圆形统计图
//         $("span.circle-text").text(averageStar);
//         var $myStat = $('#myStat').html();
//         if ($myStat == ""){
//             $('#myStat').circliful();
//         }
//         var data = { root: [{ id: '10000', name: '1星', value: '1' }, { id: '10001', name: '2星', value: '2' }, { id: '10002', name: '3星', value: '3' }, { id: '10003', name: '4星', value: '4' }, { id: '10004', name: '5星', value: '5' }] };

//         data.root[0].value = param.oneStars;
//         data.root[1].value = param.secondStars;
//         data.root[2].value = param.thirdStars;
//         data.root[3].value = param.fourStars;
//         data.root[4].value = param.fiveStars;
//         $("#poll_1").html("");
//         var poll_1 = $("#poll_1").html();
//         if(poll_1 == ""){
//             $("#poll_1").poll("poll", {
//                 title: '星星数据展示',
//                 titleColor: '#ff6600',
//                 data: data
//             });
//         }
//      }

//     return {
//         showStars:showStars,
//         httpPost:httpPost,
//         httpGet:httpGet,
//         hintWindow:hintWindow,
//         qqFaceContent:qqFaceContent,
//         replaceEm:replaceEm,
//         backToTop:backToTop

//     }
// })
// };
